package com.af.financeomine.web.action;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Remotable;
import org.vraptor.plugin.hibernate.Validate;

import com.af.financeomine.dao.GrupoDao;
import com.af.financeomine.model.Grupo;
import com.af.financeomine.web.flexigrid.FlexigridRows;
import com.af.financeomine.web.interceptor.LoginInterceptor;

@Component
@InterceptedBy(LoginInterceptor.class)
public class GrupoLogic {

	private GrupoDao dao;
	private Grupo grupo;
	private List<FlexigridRows> rows;
	private int total;
	private int page = 1;
	
	public GrupoLogic(GrupoDao dao) {
		this.dao = dao;
	}
	@Validate(params="grupo")
	public void save(Grupo grupo){
		if(grupo.getId()==null || grupo.getId() == 0){
			dao.save(grupo);
		}else{
			Grupo grupo2 = dao.findById(grupo.getId());
			try {
				BeanUtils.copyProperties(grupo2, grupo);
			} catch (IllegalAccessException e) {
				
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			dao.update(grupo2);
		}
	}
	public void remove(Grupo grupo){
		grupo = dao.findById(grupo.getId());
		dao.delete(grupo);
	}
	@Remotable
	public void lista(Integer page,String qtype, Integer rp,String sortname,String sortorder, String query){
		List<Grupo> grupos = dao.lista(page, qtype, rp, sortname, sortorder, query);
		total = grupos.size();
		rows = new ArrayList<FlexigridRows>(total);
		for (int i = 0; i < total;i++) {
			rows.add(new FlexigridRows(grupos.get(i)));
		}
	}
	public void all(){
		
	}
	public void novo(){
		
	}
	public void load(Grupo grupo){
		this.grupo = dao.findById(grupo.getId());
	}
	public int getTotal() {
		return total;
	}
	public int getPage() {
		return page;
	}
	public List<FlexigridRows> getRows() {
		return rows;
	}
	public Grupo getGrupo() {
		return grupo;
	}
}
